package com.restauranteejb.utiles;

import com.google.gson.Gson;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import restaurante.entidades.*;

public class Metodos {

    public static String generarContextoJsonDesdeObject(Object _object) {
        return new Gson().toJson(_object);
    }

    public static String listadoMesasHtml(List<Mesa> mesasList, Map<Integer,String> map) {
        StringBuffer stringHtml = new StringBuffer();
        for (Mesa mesas : mesasList) {
            String idCliente = "&idcliente="+map.get(mesas.getIdmesa());
            stringHtml.append("<li><a href='cuenta.jsp?idcuenta="+mesas.getIdmesa()+idCliente+"'>"+mesas.getDescripcion()+"</a></li>");
        }
        return stringHtml.toString();
    }
    public static String listadoClientesHtml(Cliente cliente, String nroMesa){
        return "<li><a href='cuenta.jsp?idcuenta="+nroMesa+"&idcliente="+cliente.getIdCliente()+"'>"+cliente.getNombres()+", "+cliente.getApellidos()+"</a></li>";
    }
    public static String listadoTipoComprobanteParaSelect(List<TipoComprobante> comprobante){
        StringBuffer stringHtml = new StringBuffer();
        for(TipoComprobante comprobant: comprobante){
            stringHtml.append("<option value='"+comprobant.getIdtipoComprobante()+"'>"+comprobant.getDescripcion()+"</option>");
        }
        return stringHtml.toString();
    }
    public static String listadoTipoDescuentoParaSelect(List<Descuento> descuentos){
        StringBuffer stringHtml = new StringBuffer();
        for(Descuento desc: descuentos){
            stringHtml.append("<option value='"+desc.getIdDscto()+"'>"+desc.getDescripcion()+"</option>");
        }
        return stringHtml.toString();
    }
    public static String listadoProductoParaSelect(List<Producto> productos, Map<Object,Object> mapData){
        StringBuffer stringHtml = new StringBuffer();
        for(Producto producto: productos){
            if(mapData.get(""+producto.getIdproducto())!=null){
                continue;
            }
            StringBuffer datosProducto = new StringBuffer();
            datosProducto.append(producto.getIdproducto());
            datosProducto.append(Constantes.CHARACTER_SEPARADOR);
            datosProducto.append(producto.getPrecio());
            datosProducto.append(Constantes.CHARACTER_SEPARADOR);
            datosProducto.append(producto.getDescripcion());
            stringHtml.append("<option value='"+datosProducto.toString()+"'>"+producto.getNombre()+"</option>");
        }
        return stringHtml.toString();
    }
    public static String listadoUnProductoParaPedido(Producto producto, String Cantidad,DetallePedido detalle){        
        Short estado = detalle==null?null:detalle.getEstado();
        int idDetallePedido = 0;
        String nombreProducto = producto.getNombre(), estadoProductoEnPedido = null;
        String checkBoxParaAnula="";
        String dataIcon="";
        if(!verificarSiEsNuloVacio(estado)){
            idDetallePedido = detalle.getDetallePedidoPK().getCorProducto();
            if(verificarSiSonIguales(estado,Constantes.PEDIDO_DETALLE_ATENDIDO)){
                estadoProductoEnPedido = "ATENDIDO";
                dataIcon="check";
            }else if(verificarSiSonIguales(detalle.getEstado(), Constantes.PEDIDO_DETALLE_PENDIENTE)){
                estadoProductoEnPedido = "PENDIENTE";
                dataIcon="delete";
            }else if(verificarSiSonIguales(estado,Constantes.PEDIDO_DETALLE_POR_RECOGER)){
                estadoProductoEnPedido = "POR RECORGER";
                dataIcon="info";
            }
        }else{
            estadoProductoEnPedido = "AGREGADO";
        }
        double precioProducto = Double.parseDouble(""+producto.getPrecio());
        double cantidad = Double.parseDouble(Cantidad);
        double total = precioProducto*cantidad;
        String d = "<li "+dataIcon+"><a href='#anular&prod="+idDetallePedido+"'>"+nombreProducto+"- Prec. "+precioProducto+" \t Cant. "+
                    cantidad+" \t--> Total S/. \""+total+"\"\tEstado. "+estadoProductoEnPedido+"</a>"+checkBoxParaAnula+"</li>";
        return d;
    }
    public static boolean verificarSiEsNuloVacio(Object dat_){
        if(dat_ == null){
            return true;
        }
        String dat = dat_.toString();
        if(dat==null || dat.trim().length()==0 )
            return true;            
        return false;
    }
    public static boolean verificarSiSonIguales(Object dat1, Object dat2){
        String dat_1, dat_2;
        dat_1 = "" + dat1;
        dat_2 = "" + dat2;
        return dat_1.trim().compareToIgnoreCase(dat_2.trim()) == 0;
    }
    public static boolean verificarSiExisteContenido(Object dat1, Object dat2){
        String dat_1, dat_2;
        dat_1 = "" + dat1;
        dat_2 = "" + dat2;
        return dat_1.trim().indexOf(dat_2.trim()) != -1;
    }
    public static Map<Object,Object> obtenerParametrosDesdeArreglos(String... dat1){
        Map map = new HashMap();
        String datArreCodigo[] = dat1[0].split(Constantes.CHARACTER_COMA);
        if(dat1[0].length()==0){
            return map;
        }
        String datArreCantidad[] = new String[datArreCodigo.length];
        if(dat1.length==2){
            datArreCantidad = dat1[1].split(Constantes.CHARACTER_COMA);
        }
        
        if(datArreCantidad.length!=datArreCantidad.length){
            return null;
        }
        for(int i=0; i<datArreCodigo.length; i++){
            map.put(datArreCodigo[i],""+datArreCantidad[i]);
        }
        return map;
    }
    public static boolean validarSiMesaTienePedido(Mesa mesa, List<Pedido> pedidos){
        for(Pedido pedido: pedidos){
            if(verificarSiSonIguales(mesa.getIdmesa(), pedido.getMesaIdmesa().getIdmesa())){
                return true;
            }
        }
        return false;
    }
    public static Pedido obtenerPedidoDesdeMesa(Mesa mesa, List<Pedido> pedidos){
        for(Pedido pedido: pedidos){
            if(verificarSiSonIguales(mesa.getIdmesa(), pedido.getMesaIdmesa().getIdmesa())){
                return pedido;
            }
        }
        return null;
    }
    public static double obtenerTotalCuenta(Pedido p){
        double total=0.0;
        for(DetallePedido det:p.getDetallePedidoCollection()){
            total+=det.getCantidad()*Double.parseDouble(""+det.getProducto().getPrecio());
        }
        return total;
    }
}
